function draw_64point_dit_fft()
    % 64点DIT-FFT流图绘制

    close all;
    % 请手动使用全屏显示
    hold on;

    % 参数设置
    N = 64;                    % FFT点数
    L = 6;                     % 级数
    stage_width = 200;         % 每级宽度
    stage_gap = 80;            % 每级间距
    point_spacing = 12;        % 点间垂直间距
    start_x = 50;              % 起始x坐标
    start_y = 50;              % 起始y坐标

    % 颜色设置
    colors = [
        0.2 0.4 0.8;    % 蓝色 - 第1级
        0.8 0.2 0.2;    % 红色 - 第2级
        0.2 0.7 0.3;    % 绿色 - 第3级
        0.9 0.6 0.1;    % 橙色 - 第4级
        0.6 0.2 0.8;    % 紫色 - 第5级
        0.1 0.7 0.8;    % 青色 - 第6级
    ];

    % 位倒置函数生成
    bit_reversed = generate_bit_reversed_order(N);

    % 绘制标题
    title('64-Point Base-2 DIT-FFT Flow Graph (6 Stages)', ...
          'FontSize', 14, 'FontWeight', 'bold');
    xlabel('Processing Stages');
    ylabel('Data Index');

    % 绘制所有节点
    for stage = 0:L
        x_pos = start_x + stage * (stage_width + stage_gap);
        for point = 0:N-1
            y_pos = start_y + point * point_spacing;

            % 绘制节点（首）
            plot(x_pos, y_pos, 'ko', 'MarkerSize', 1);

            % 添加节点标签（只在首尾）
            if stage == 0 % 首部不应为63-0，应为逐次分离之后的顺序！！！
                text(x_pos - 10, y_pos, sprintf('x(%d)', bit_reversed(N-point)), ...
                     'FontSize', 10, 'HorizontalAlignment', 'right');
            end

            if stage == L
                text(x_pos + 50, y_pos, sprintf('X(%d)', N-1-point), ...
                     'FontSize', 10, 'HorizontalAlignment', 'right');
            end
        end

        if stage ~= L
            x_pos = start_x + stage * (stage_width + stage_gap) + stage_gap;
            for point = 0:N-1
                y_pos = start_y + point * point_spacing;

                % 绘制节点（中）
                plot(x_pos, y_pos, 'ko', 'MarkerSize', 1);
            end
        end
    end

    % 绘制各级蝶形运算
    for stage = 1:L
        spacing = 2^(stage-1);  % 蝶形间距
        color = colors(stage, :);
        x_start1 = start_x + (stage-1) * (stage_width + stage_gap);
        x_start2 = start_x + (stage-1) * (stage_width + stage_gap) + stage_gap;
        x_end = start_x + stage * (stage_width + stage_gap);

        % 绘制该级的所有蝶形
        for group = 0:(N/(2*spacing)-1) % 每一级蝶形运算的重复组数（每阶段交叉线交点，即节点个数为N/2，但基数不同，重复组数不同）
            base_index = group * 2 * spacing; % 对每一组，求其起点

            for k = 0:spacing-1 % 每一组所含节点数（总节点数N/2除以组数group数值上等于间距spacing）
                % 计算蝶形运算的两个输入索引
                idx1 = base_index + k;      % 绘制斜线的索引（下）
                idx2 = base_index + k + spacing; % 绘制斜线的索引（上）

                if idx1 < N && idx2 < N % 限定总范围，防止异常
                    y1 = start_y + idx1 * point_spacing; % 绘制斜线的坐标（下）
                    y2 = start_y + idx2 * point_spacing; % 绘制斜线的坐标（上）

                    % 绘制直接路径（实线），横向
                    plot([x_start1, x_start2], [y1, y1], '-', ...
                         'Color', color, 'LineWidth', 0.5);
                    plot([x_start1, x_start2], [y2, y2], '-', ...
                         'Color', color, 'LineWidth', 0.5);

                    plot([x_start2, x_end], [y1, y1], '-', ...
                         'Color', color, 'LineWidth', 0.5);
                    plot([x_start2, x_end], [y2, y2], '-', ...
                         'Color', color, 'LineWidth', 0.5);

                    % 绘制交叉路径（虚线），交叉
                    plot([x_start2, x_end], [y1, y2], '-', ... % 斜向上
                         'Color', color, 'LineWidth', 0.3);
                    plot([x_start2, x_end], [y2, y1], '-', ... % 斜向下
                         'Color', color, 'LineWidth', 0.3);

                    % 标注旋转因子
                    mid_x1 = (x_start1 + x_start2) / 2;
                    text(mid_x1, y1 - 5, sprintf('W_{64}^{%d}', (spacing-1 - k) * 2^(L - stage)), ...
                         'FontSize', 10, 'Color', color, ...
                         'HorizontalAlignment', 'center');

                    % 标注-1
                    mid_x2 = (x_start2 + x_end) / 2;
                    text(mid_x2, y1 - 5, sprintf('-1'), ...
                         'FontSize', 10, 'Color', color, ...
                         'HorizontalAlignment', 'center');
                end
            end
        end

        % 添加级标签
        text(x_start2 + stage_width/2, start_y - 30, ...
             sprintf('Stage %d\n(Spacing=%d)', stage, spacing), ...
             'FontSize', 10, 'FontWeight', 'bold', 'Color', color, ...
             'HorizontalAlignment', 'center');
    end

    % 设置坐标轴
    axis([0, start_x + L*stage_width + 50, ...
          start_y - 50, start_y + N*point_spacing + 50]);
    grid on;
    set(gca, 'XTick', start_x + (0:L)*stage_width);
    set(gca, 'XTickLabel', {'Input', 'S1', 'S2', 'S3', 'S4', 'S5', 'Output'});
    set(gca, 'YTick', start_y + (0:8:N-1)*point_spacing);
    set(gca, 'YTickLabel', []);  % 隐藏y轴刻度数字

    hold off;

    % 添加图例
    legend_labels = cell(1, L);
    for i = 1:L
        legend_labels{i} = sprintf('Stage %d', i);
    end
end
